[Note] Git: 基本觀念


Posted by urlun0404 on 2022-11-03

主要記錄最初入門 Git 的一些林林總總,一開始不會談太多細節,後續會持續更新,若有發現錯誤也歡迎指正。

簡介

  • Git 是一種追蹤和記錄版本差異的檔案版本控制工具。
  • Git 和常聽到的 GitHub 不一樣,Git 是一種可在自己電腦 離線獨立 管理檔案版本的工具;GitHub 是一款遠端版、需要網路連線、可多人編輯的類Git雲端服務,其他常見類似的服務還有 GitLabBitbucket
  • 簡單來說,Git 和 GitHub、GitLab、Bitbucket 的關係就像是:自己的電腦 和 Google Drive、OneDrive、Dropbox。


使用Git的第一步

安裝後,開始使用 Git 的第一步有兩個方法:一種是自行在自己電腦一步一腳印設置資料夾的Git追蹤環境(自行設置),另一種是直接複製遠端服務的Repository(遠端複製)。

  1. 自行設置:對要追蹤檔案們所在目錄使用 git init
    • 也就是針對要追蹤的檔案們所在目錄建立一個 .git資料夾
    • .git資料夾平常是隱藏在目錄裡,負責儲存追蹤的所有紀錄。
  2. 遠端複製:以下用我GitHub已存在的Repository為例,
    • 如圖點選Code按鈕,出現Clone視窗,按下網址旁邊的按鈕複製網址
    • 註:如果是要先建置一個全新的Repository,也是在建置後找到網址,同樣步驟複製即可
    • 要注意的是,整個遠端Repository複製下來會是一個資料夾(如下圖),通常會在自己電腦要儲存這個Repository資料夾的父層(前一層)資料夾/位置去輸入Git複製指令。
    • 指令:git clone RemoteRepository那串網址

遠端複製的動作會連同 遠端上傳的路徑設定 都幫忙設定好,非常方便,如果常用遠端服務,個人是蠻推薦這個作法。


Git 工作環境

真正要使用 Git 來追蹤檔案異動,要先認識使用 Git 時的工作環境(如下圖),基本上可依 檔案的狀態(state) 分為三區:
(1) Working Directory, (2) Staging Area / Index, (3) Local Repository (Git Directory)

  • Working Directory 工作目錄:就是平常自己電腦裡修改、存放檔案的地方。
  • Staging Area 暫存區 / Index 索引:存放那些準備被提交檔案的地方。
  • Git Directory (Local Repository) 本地端儲存庫:確認記錄此次檔案異動的地方,確認記錄的動作稱之為提交(Commit)。這裡稱 Local Repository 是要跟前面說的遠端儲存庫-Remote Repository 區隔。

歸納一下,一般使用 Git 記錄檔案異動的流程如下:

Working Area ⇨ Staging Area ⇨ local Repository ⇨ Remote Repository (optional)

將修正後的檔案從 Working Area上傳至Staging Area,確認檔案異動後再由Local Repository 記錄這次的所有檔案異動。最後的 Remote Repository 看個人是否要上傳,但就像很多人會把檔案備份或分享到雲端硬碟一樣,大家也常將異動紀錄上傳至 Remote Repository。


Git檔案管理

這邊開始要從檔案在 Git 工作環境所存放的位置,了解整個檔案版本異動的管理流程。首先,檔案的狀態對應到檔案存放於哪一區,分別有三種:(1) Modified, (2) Staged, (3) Commited

  • Modified:是指 Git 發現檔案在你的電腦裡被修改了,但還沒被上傳至 Staging Area,此時檔案也是 Unstaged 的狀態。
  • Staged:修改後的檔案上傳至 Staging Area,準備被提交此次異動。
  • Commited:Staging Area 這次的所有檔案異動都被記錄、儲存了。


最後,有關Git的一些基本和常用指令整理在另一篇筆記 ─ [Note] Git: 常用指令




題外話,一個有趣的問題是:為什麼要分3步,而不是從Working Area直接送到Local Repository提交?

在不討論 Git 恢復機制的前提下,個人認為,Local Repository 所儲存的異動基理當是 確認無誤 的狀態,不過有時正式提交後可能會有反悔、想取消上傳或發現有些檔案沒跟著上傳等等。

通常一個系統是由許多人共同開發,想像一下,如果是2步直接上傳的機制,相對較容易出現這種提交出去、拿回來的情形,而這種狀況如果太常發生在開發過程會造成很多困擾,總之我想這是 Git 為了避免這種狀況發生所做的貼心設計(?)


#Git #note







Related Posts

Deep Learning on 3D object detection paper 閱讀路徑

Deep Learning on 3D object detection paper 閱讀路徑

Deploy express app in Heroku with cleardb

Deploy express app in Heroku with cleardb

Express取得網址內的資訊,幾種不同方式

Express取得網址內的資訊,幾種不同方式


Comments